package org.example.rocketmqstudy.producer;

import io.netty.channel.DefaultChannelId;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class SyncProducer {
    public static void main(String[] args) throws Exception {
        DefaultChannelId.newInstance();

        // 初始化一个producer并设置Producer group name
        DefaultMQProducer producer = new DefaultMQProducer("my-producer-group"); //（1）生产者组
        // 设置NameServer地址
        producer.setNamesrvAddr("8.138.36.56:9876");  //（2）
        producer.setSendMsgTimeout(60 * 1000);
        // 启动producer
        producer.start();
        for (int i = 0; i < 3; i++) {
            // 创建一条消息，并指定topic、tag、body等信息，tag可以理解成标签，对消息进行再归类，RocketMQ可以在消费端对tag进行过滤
            String topic = "test-sync-send";
            String tag = "TagA";
            byte[] messageBody = ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET);
            Message msg = new Message(topic /* Topic */,
                    tag /* Tag */,
                    messageBody /* Message body */
            );   //（3）

            // 利用producer进行发送，并同步等待发送结果
            try {
                System.out.printf("发送消息，msg：%s%n", new String(msg.getBody()));
                SendResult sendResult = producer.send(msg);   //（4）
                System.out.printf("发送消息，sendResult：%s%n", sendResult);
            } catch (Exception e) {
                // 重要！！！发送同步消息时，一定要捕获异常，并做失败兜底，如重试
                e.printStackTrace();
            }
        }
        // 一旦producer不再使用，关闭producer
        producer.shutdown();
    }

}
